package main

import "fmt"

type Human2 struct {
	name string
}

func (human *Human2) speak() {
	fmt.Println("我的名字是:", human.name)
}

type Candidate struct {
	score int
}

func (candidate *Candidate) totalScore() {
	fmt.Println("我的得分是:", candidate.score)
}

func (candidate *Candidate) speak() {
	fmt.Println("逢考必过")
}

// Student2 最简单的形式实现多继承
type Student2 struct {
	//组合两个类型的匿名字段，则可直接调用两个类型的方法
	Human2
	Candidate
}

func (student *Student2) study() {
	fmt.Println("好好学习")
}

func main() {
	h := Human2{name: "熊大"}
	c := Candidate{score: 100}
	student := Student2{
		h,
		c,
	}
	//go语言也未对多继承的相同方法提供支持，因此需要避免继承多个类型时，有相同的方法签名
	//student.speak()
	student.totalScore()
	fmt.Printf("%+v", student)
}
